package uy.edu.fing.pgsegesb.web;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

public class LogBean {
	
	private static Logger log = Logger.getLogger(LogBean.class);
	
	
	
	private static String MARCA = "###";
	
	private List<DatosLogInfo> datos;
	
	public LogBean() {
		
		
	}
	
	private void leerArchivoLog () {
		
		try {
			
			datos = new ArrayList<DatosLogInfo>();
			
			// Abrimos el archivo
			FileInputStream fstream = new FileInputStream("C:\\Servidores\\jboss-5.1.0.GA\\server\\default\\log\\pgsegesb.log");
			
			// Creamos el objeto de entrada
			DataInputStream entrada = new DataInputStream(fstream);
			
			// Creamos el Buffer de Lectura
			BufferedReader buffer = new BufferedReader(new InputStreamReader(entrada));
			String strLinea;
			String completo;
			// Leer el archivo linea por linea
			while ((strLinea = buffer.readLine()) != null) {
				
				DatosLogInfo d = procesarLinea(strLinea);
				if (d != null) {
					datos.add(d);
				}
				
			}
			// Cerramos el archivo
			entrada.close();
			
		} catch (Exception e) { // Catch de excepciones
			System.err.println("Ocurrio un error: " + e.getMessage());
			e.printStackTrace();
		}
	}
	
	public void eliminarLog () {
		File f = new File("C:\\Servidores\\jboss-5.1.0.GA\\server\\default\\log\\pgsegesb.log");

		BufferedWriter bw;
		try {
			bw = new BufferedWriter(new FileWriter(f));
			bw.write("");
			bw.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	private DatosLogInfo procesarLinea(String strLinea) {
		
		if (!strLinea.contains(MARCA)) {
			return null;
		}
		
		int i = strLinea.indexOf(MARCA);
		String strUtil = strLinea.substring(i);
		
		String[] tokens = strUtil.split(",");
		
		DatosLogInfo d = new DatosLogInfo();
		d.setPropiedad(tokens[1]);
		d.setXml(XmlFormatter.format(tokens[2]));
		
		return d;
	}

	public void cargarLog () {
		log.info("cargando log...");
		
		leerArchivoLog();
		
		log.info("DESPUES DE CARGAR EL ARCHIVO!!");
		
	}

	public void setDatos(List<DatosLogInfo> datos) {
		this.datos = datos;
	}

	public List<DatosLogInfo> getDatos() {
		return datos;
	}
	
}
